import { MessagePlugin } from 'tdesign-react'
// import { clearStore } from '@/stores'
import axios from 'axios' // 也是请求接口的一个依赖，类似于 fetch
import * as uuid from 'uuid' // 这是一个 uuid 的依赖，避免304 接口请求
// 这里的两个依赖都是第三方依赖，所以需要安装一下

// 这里 ...config 其实是新构建了一个对象，把里面的值都放到 config 对象里面
const ApiRequest = ({ ...config }) => {
  const {
    api: {
      url = '',
      method = 'POST',
      description = '', // 这里等晚上再跟你讲解一下
    },
    params = {}, // 这里如果变成了 params1 外面应该怎么传值
    // method = 'POST',
    headers = undefined
  } = config

  if (!url) { // 如果没有 url, 那么就提示，找不到请求
    return new Promise((resolve, reject) => {
      resolve({
        code: -1,
        note: '[Error] Connot found request url: ' + url
      })
    })
  }

  // 这是请求的参数
  let requestParams = {
    method, // 请求方法，默认 POST
    url, // 请求链接
    headers: Object.assign({ 'Content-Type': 'application/json' }, headers ? {
      ...headers,
    } : {
      Accept: 'application/json',
      'Content-Type': 'application/json;charset=utf-8',
      'x-request-uuid': uuid.v4(),
    }),
    cerdentials: 'include',
    params: params, // 请求参数
    timeout: 20000, // 最大延迟 20s,
    timeoutErrorMessage: '连接超时，请稍后再试！', // 超时消息提示
    // mode: 'cors', // 是否跨域
  }

  // 这里是调用接口的地方（也是核心的代码），使用了一个 _____ promise
  return new Promise((resolve, reject) => {
    // 里面是一个 axios 方法，也是一个 promise.
    axios(requestParams).then((response: any) => {
      resolve(response.data) // 当一切正常的时候就正常返回数据
    }).catch((error: any) => { // catch 捕获异常，这是有问题的时候就报错
      reject({ message: '请求失败', error: error.code + ': ' + error.message })
    })
  })
}

export default ApiRequest
